//package com.demo.ai.springaidemo.controller;
//
//
//import com.demo.ai.springaidemo.constant.AIChatConstants;
//import lombok.AllArgsConstructor;
//import org.springframework.ai.chat.messages.Message;
//import org.springframework.ai.chat.messages.SystemMessage;
//import org.springframework.ai.chat.messages.UserMessage;
//import org.springframework.ai.chat.prompt.Prompt;
//import org.springframework.ai.chat.prompt.PromptTemplate;
//import org.springframework.ai.ollama.OllamaChatModel;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
//
//import java.util.*;
//
//
//@AllArgsConstructor
//@RestController
//@RequestMapping("/ai")
//public class AIChatController {
//
//    private final OllamaChatModel chatModel;
//
//    @PostMapping("/chat")
//    public SseEmitter chat(String input){
//        SseEmitter sseEmitter = new SseEmitter(AIChatConstants.TIME_OUT);
//        PromptTemplate promptTemplate = new PromptTemplate("""
//                PURPOSE: {purpose}
//                """);
//        Map<String, Object> map = new HashMap<>();
//        map.put("purpose", input);
//        Prompt prompt = promptTemplate.create(map);
//        chatModel.stream(prompt).subscribe(response -> {
//                    String content = response.getResult().getOutput().getContent();
//                    try {
//                        // 发送 SSE 事件
//                        sseEmitter.send(SseEmitter.event()
//                                .data(content)
//                                .id(String.valueOf(System.currentTimeMillis()))
//                                .build());
//                    } catch (Exception e) {
//                        sseEmitter.completeWithError(e);
//                    }
//                },
//                sseEmitter::completeWithError,
//                sseEmitter::complete
//        );
//        // 处理客户端断开连接
//        sseEmitter.onCompletion(() -> {
//            // 可在此处释放资源
//            System.out.println("SSE connection completed");
//        });
//        sseEmitter.onTimeout(() -> {
//            sseEmitter.complete();
//            System.out.println("SSE connection timed out");
//        });
//
//        return sseEmitter;
//    }
//
//    @PostMapping("/chatHistory")
//    public SseEmitter chatHistory(String input){
//        SseEmitter emitter = new SseEmitter(AIChatConstants.TIME_OUT);
//        List<Message> messages = new ArrayList<>();
//        messages.add(new SystemMessage("如果我说你好 你就回答 太棒了"));
//        messages.add(new UserMessage(input));
//        chatModel.stream(new Prompt(messages)).subscribe(response -> {
//            String content = response.getResult().getOutput().getContent();
//            try {
//                emitter.send(SseEmitter.event()
//                        .data(content)
//                        .id(String.valueOf(System.currentTimeMillis()))
//                        .build());
//            } catch (Exception e) {
//                emitter.completeWithError(e);
//            }
//        },
//                emitter::completeWithError,
//                emitter::complete
//        );
//        // 处理客户端断开连接
//        emitter.onCompletion(() -> {
//            // 可在此处释放资源
//            System.out.println("SSE connection completed");
//        });
//        emitter.onTimeout(() -> {
//            emitter.complete();
//            System.out.println("SSE connection timed out");
//        });
//
//        return emitter;
//    }
//
//
//
//}
